// src/store/strategy.ts
import { createStore } from 'vuex'

// 定义策略类型（可选，增强类型提示）
type StrategyType = 'simple' | 'a2c' | 'dqn' | 'ppo'

// 创建Vuex Store实例
const strategyStore = createStore({
  state: {  //状态定义
    // 策略相关状态
    selectedStrategy: 'simple' as StrategyType, // 默认选中simple策略
    strategyList: [ // 所有可用策略列表（全局可复用）
      { value: 'simple', label: '传统策略' ,isLoading :true },
      { value: 'a2c', label: 'A2C策略' ,isLoading :true},
      { value: 'dqn', label: 'DQN策略' ,isLoading :true},
      { value: 'ppo', label: 'PPO策略' ,isLoading :true}
    ],
    // 存储envParamId
    envParamId: null as string | null
  },
  mutations: { //修改方法
    // 修改选中策略（同步操作）
    SET_SELECTED_STRATEGY(state, strategy: StrategyType) {
      // 校验策略是否在可用列表中
      const isValid = state.strategyList.some(item => item.value === strategy)
      if (isValid) {
        state.selectedStrategy = strategy
      } else {
        console.warn(`无效的策略：${strategy}，已自动切换为默认策略`)
        state.selectedStrategy = 'simple' // 无效策略时回退到默认
      }
    },
    // 新增mutation用于设置envParamId
    SET_ENV_PARAM_ID(state, paramId: string | null) {
      state.envParamId = paramId
    },
    SET_STRATEGY_LOADING(state, payload: { value: StrategyType, isLoading: boolean }) {
      const target = state.strategyList.find(item => item.value === payload.value)
      if (target) {
        target.isLoading = payload.isLoading
      }
    }
  },
  actions: {
    // 更新策略（支持异步操作，如需要先请求接口再更新）
    updateStrategy({ commit }, strategy: StrategyType) {
      // 这里可以添加异步逻辑（如：保存策略到后端）
      // await api.saveStrategy(strategy)

      // 调用mutation更新状态
      commit('SET_SELECTED_STRATEGY', strategy)
    }
  },
  getters: {  //全局访问
    // 获取当前选中策略（全局可访问）
    currentStrategy: (state) => state.selectedStrategy,
    // 获取所有策略列表（全局可复用）
    allStrategies: (state) => state.strategyList,
    // 用于获取envParamId
    getEnvParamId: (state) => state.envParamId
  },
  modules: {
    // 如需扩展其他模块，可在此添加
  }
})

export default strategyStore